﻿''' <summary>
''' Fichero que contiene la clase Equipo
''' </summary>
''' <author>Juan David Cabezuelo, Arturo Sirvent, Fermín Martínez, Eugenio Cañete y Pablo Vicedo</author>

Public Class Equipo

    Private _NombreEquipo As String
    Private _IdJugadorCapitan As Integer
    Private _IdJugadorNormal As Integer
    Private _Id As Integer

    ''' <summary>
    ''' Constructor vacío 
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub New()
        Me._NombreEquipo = ""
        Me._IdJugadorCapitan = 0
        Me._IdJugadorNormal = 0
    End Sub

    ''' <summary>
    ''' Constructor con parámetros que inserta el objeto automaticamente en la bd
    ''' y darles valor
    ''' </summary>
    ''' <param name="nombreEquipo"></param>
    ''' <param name="capitan"></param>
    ''' <param name="jugador"></param>
    ''' <remarks></remarks>
    Public Sub New(ByVal nombreEquipo As String, _
                   ByVal capitan As Integer, ByVal jugador As Integer)

        If ValidarCadena(nombreEquipo, 50, True) Then
            Me._NombreEquipo = nombreEquipo
        Else
            Throw New ArgumentException("El nombre no puede exceder de 50 caracteres ni estar vacío")
        End If

        If capitan = 0 Then
            Throw New ArgumentException("Error, tiene que seleccionar un capitán")
        Else
            Me._IdJugadorCapitan = capitan
        End If
        If jugador = 0 Then
            Throw New ArgumentException("Error, tiene que seleccionar un segundo jugador")
        Else
            Me._IdJugadorNormal = jugador
        End If

        'Insercion automática del equipo en la bd cada vez que se crea
        Dim miBD = New BaseDatos()

        'inserto el nombre y los jugadores del equipo en la base de datos equipo
        Dim filasAfectadas As Integer = miBD.InsertarModificarBorrar("INSERT INTO Equipos(NombreEquipo, IdJugadorCapitan, IdJugadorNormal, Accesible" & _
                      ") VALUES('" & Me._NombreEquipo & "' , " & Me._IdJugadorCapitan & " , " & Me._IdJugadorNormal & " , " & -1 & ")")
        Me._Id = buscarMiId()
        filasAfectadas += miBD.InsertarModificarBorrar("INSERT INTO Formado(IdEquipo, IdJugador) values(" & Me._Id & " , " & Me._IdJugadorCapitan & ")")
        filasAfectadas += miBD.InsertarModificarBorrar("INSERT INTO Formado(IdEquipo, IdJugador) values(" & Me._Id & " , " & Me._IdJugadorNormal & ")")
        If filasAfectadas < 3 Then
            Throw New ArgumentException("Error al guardar equipo en la base de datos")
        Else
            MsgBox("Equipo insertado correctamente")
            FormAltaEquipo.Close()
        End If
    End Sub

    ''' <summary>
    ''' Constructor de copia
    ''' </summary>
    ''' <param name="equipo"></param>
    ''' <remarks></remarks>
    Public Sub New(ByVal equipo As Equipo)
        Me._NombreEquipo = equipo._NombreEquipo
        Me._IdJugadorCapitan = equipo._IdJugadorCapitan
        Me._IdJugadorNormal = equipo._IdJugadorNormal
    End Sub

    ''' <summary>
    ''' Subproceso que realiza la actualización del equipo en la base de datos
    ''' </summary>
    ''' <param name="nombreEquipo"></param>
    ''' <param name="idJugador1"></param>
    ''' <param name="idJugador2"></param>
    ''' <param name="id"></param>
    ''' <param name="idAnterior1"></param>
    ''' <param name="idAnterior2"></param>
    ''' <remarks></remarks>
    Public Sub Actualizar(ByVal nombreEquipo As String, ByVal idJugador1 As Integer, ByVal idJugador2 As Integer, ByVal id As Integer, _
                          ByVal idAnterior1 As Integer, ByVal idAnterior2 As Integer)
        If ValidarCadena(nombreEquipo, 50, True) Then
            Me._NombreEquipo = nombreEquipo
        Else
            Throw New ArgumentException("El nombre no puede exceder de 50 caracteres ni estar vacío")
        End If

        If idJugador1 = 0 Then
            Throw New ArgumentException("Error, tiene que seleccionar un capitán")
        Else
            Me._IdJugadorCapitan = idJugador1
        End If
        If idJugador2 = 0 Then
            Throw New ArgumentException("Error, tiene que seleccionar un segundo jugador")
        Else
            Me._IdJugadorNormal = idJugador2
        End If

        'Insercion automática del equipo en la bd cada vez que se crea
        Dim miBD = New BaseDatos()

        'inserto el nombre y los jugadores del equipo en la base de datos equipo
        Dim filasAfectadas As Integer = miBD.InsertarModificarBorrar("UPDATE Equipos SET NombreEquipo='" & nombreEquipo & _
                                                                     "', IdJugadorCapitan=" & idJugador1 & ", IdJugadorNormal=" & _
                                                                     idJugador2 & " WHERE Id = " & id & ";")
        filasAfectadas += miBD.InsertarModificarBorrar("Update Formado set IdJugador = " & idJugador1 & " where IdEquipo = " & id & " and IdJugador = " & idAnterior1 & ";")
        filasAfectadas += miBD.InsertarModificarBorrar("Update Formado set IdJugador = " & idJugador2 & " where IdEquipo = " & id & " and IdJugador = " & idAnterior2 & ";")
        
        If filasAfectadas = 0 Then
            Throw New ArgumentException("Error al modificar el equipo")
        Else
            MsgBox("Se ha actualizado el equipo")
            FormModificarEquipo.Close()
        End If
    End Sub

    ''' <summary>
    ''' Subproceso que elimina un equipo de la base de datos.
    ''' </summary>
    ''' <param name="nombreEquipo"></param>
    ''' <param name="idJugador1"></param>
    ''' <param name="idJugador2"></param>
    ''' <param name="id"></param>
    ''' <remarks></remarks>
    Public Sub Eliminar(ByVal nombreEquipo As String, ByVal idJugador1 As Integer, ByVal idJugador2 As Integer, ByVal id As Integer)
        Dim miBD = New BaseDatos()

        Dim filasAfectadas As Integer = miBD.InsertarModificarBorrar("UPDATE Equipos SET NombreEquipo='" & nombreEquipo & "', IdJugadorCapitan=" & idJugador1 & ", IdJugadorNormal=" & idJugador2 & ", Accesible=" & 0 & " WHERE Id = " & id & ";")
        If filasAfectadas = 0 Then
            Throw New ArgumentException("Error al eliminar el equipo")
        Else
            MsgBox("Equipo eliminado correctamente")
            FormBajaEquipo.Close()
        End If
    End Sub

    Public Property NombreEquipo() As String
        Get
            Return Me._NombreEquipo
        End Get
        Set(value As String)
            Me._NombreEquipo = value
        End Set
    End Property

    Public Property IdJugadorCapitan() As Integer
        Get
            Return Me._IdJugadorCapitan
        End Get
        Set(value As Integer)
            Me._IdJugadorCapitan = value
        End Set
    End Property

    Public Property IdJugadorNormal() As Integer
        Get
            Return Me._IdJugadorNormal
        End Get
        Set(value As Integer)
            Me._IdJugadorNormal = value
        End Set
    End Property

    ''' <summary>
    ''' Función que develve la id del último equipo insertado
    ''' </summary>
    ''' <returns>Integer con la id del equipo</returns>
    ''' <remarks></remarks>
    ''' 
    Public Function buscarMiId() As Integer
        Dim miBd = New BaseDatos
        Dim resultado = New List(Of String)
        Dim miId = New String() {}
        resultado = miBd.Consultar("SELECT * FROM Equipos", "Equipos")
        miId = resultado.Last().Split(CChar("-"))
        Return CInt(miId.Last())
    End Function

    ''' <summary>
    ''' Destructor
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub Dispose()
        Me._NombreEquipo = ""
        Me._IdJugadorCapitan = 0
        Me._IdJugadorNormal = 0
    End Sub

    ''' <summary>
    ''' Destructor
    ''' </summary>
    ''' <remarks></remarks>
    Protected Overrides Sub finalize()
        Me._NombreEquipo = ""
        Me._IdJugadorCapitan = 0
        Me._IdJugadorNormal = 0
    End Sub

End Class
